# 螺旋素数
# 从1开始逆时针螺旋着摆放自然数，我们可以构造出一个边长为7的螺旋数阵。
# 37 36 35 34 33 32 31
# 38 17 16 15 14 13 30
# 39 18  5  4  3 12 29
# 40 19  6  1  2 11 28
# 41 20  7  8  9 10 27
# 42 21 22 23 24 25 26
# 43 44 45 46 47 48 49
#
# 可以发现，所有的奇数平方都在这个螺旋方针的右下对角线上，更有趣的是，在所有对角线上一共有8个素数，比例达到8/13 ≈ 62%。
#
# 在这个方阵外面完整地再加上一层，就能构造出一个边长为9的螺旋方阵。如果不断重复这个过程，当对角线上素数的比例第一次低于10%时，螺旋数阵的边长是多少？
import time
st = time.time()

from math import sqrt

def is_prime(x):
    flag = 1
    sqrt_x = round(sqrt(x)) + 1
    i = 2
    while i<=sqrt_x:
        if x%i==0:
            flag = 0
            break
        i += 1
    return flag


def f3(n):
    return is_prime((2*(n-1))*(2*(n-1)+1)+1)

def f2(n):
    return is_prime((2*(n-1))**2+1)

def f1(n):
    return is_prime((2*(n-1)-1)*(2*(n-1))+1)

def f4(n):
    return 4*(n-1)+1

def f5(n):
    return 2*n-1


dia = 1
n = 1
primes_num = 0
while dia>0.1:
    n += 1
    primes_num += f1(n)+f2(n)+f3(n)
    fenmu = f4(n)
    dia = primes_num/fenmu

print(f5(n))

print(time.time()-st)